﻿var win = {
	_init: function(option) {
		var _default = {
			bgImg: "main.jpg",//桌面背景图
			settings:{
				liveTiles:true,//是否开启动态磁贴(总开关)
			},
			start_apps:[{//开始菜单程序
				name:"腾讯QQ",//名称
				icon:"fa-qq",//图标
				href:"",//跳转地址，
				shortcut:{
					is:true,//是否显示在桌面
					order:1//排序
				},
				start_tile:{
					is:true,//是否显示在开始菜单磁贴
					order:1,//排序
					live:true,//是否开启动态磁贴
					size:3,//磁贴大小 1:小 2:中 3:大
					msgs:[{//动态磁贴内容
						title:"yoding：",
						content:"放假啦!"
					},{
						title:"I say：",
						content:"是呢，去逛街吧。"
					}]
				}
			}],
			menus:{
				blank:[{//window右键
					name:"全屏模式",//名称
					icon:"fa-window-maximize",//图标
					fn:"_enterFullScreen()"//menuFn.js中对应的方法
				},{
					name:"窗口模式",
					icon:"fa-window-restore",
					fn:"_exitFullScreen()"
				},{
					name:"下一个壁纸",
					icon:"fa-magic",
					fn:"_nextPaper()"
				}],
				start_apps:[{//开始菜单start_apps右键
					name:"发送到桌面",
					icon:"fa-send",
					fn:"_app2shortcut()"
				},{
					name:"发送到磁贴",
					icon:"fa-send",
					fn:"_app2startTile()"
				}],
				start_tiles:[{
					name:"发送到桌面",
					icon:"fa-send",
					fn:"_tile2shortcut()"
				},{
					name:"动态磁贴",
					icon:"fa-youtube-play",
					fn:"",
					childs:[{
						name:"开启",
						fn:"_activeTile(true)",
						icon:"fa-toggle-on"
					},{
						name:"关闭",
						icon:"fa-toggle-off",
						fn:"_activeTile(false)"
					}]
				},{
					name:"磁贴大小",
					icon:"fa-send",
					fn:"",
					childs:[{
						name:"大",
						icon:"fa-plus-square-o",
						fn:"_resizeTile(3)"
					},{
						name:"中",
						icon:"fa-square-o",
						fn:"_resizeTile(2)"
					},{
						name:"小",
						icon:"fa-minus-square-o",
						fn:"_resizeTile(1)"
					}]
				}]
			}
		}
		$.extend(_default, option);
		win._variable.options=_default;
		
		//时间
		win._timeInfo();
		//电量图标
		win._batteryInfo();
		//桌面壁纸
		win._initBg();
		//桌面快捷方式
		win._initShortcuts();
		//开始菜单程序列表
		win._initStartApps();
		//开始菜单磁贴列表
		win._initStartTiles();
		//绑定事件
		win._initHandler();
	},
	_variable:{
		options:{},//合并完成后的json,为此用户的所有配置
		keyDown:{//当前按键
			17:false//ctrl
		},
		contextMenuElement:{}//当前右键的元素
	},
	_util:{
		getApp:function(appname){
			var apps=win._variable.options.start_apps;
			for(var i in apps){
				if(apps[i].name==appname.trim()){
					return apps[i];
				}
			}
		},
		getShortcuts:function(){
			var apps=win._variable.options.start_apps;
			var shortcuts=[];
			for(var i in apps){
				if(apps[i].shortcut.is){
					shortcuts.push(apps[i]);
				}
			}
			return shortcuts;
		},
		getStartTiles:function(){
			var apps=win._variable.options.start_apps;
			var tiles=[];
			for(var i in apps){
				if(apps[i].start_tile.is){
					tiles.push(apps[i]);
				}
			}
			return tiles;
		},
		replace:function(html,obj){//替换html中的元素
			for(var i in obj){
				if("object"==typeof(obj[i])){
					for(var j in obj[i]){
						html=html.replace("{{"+i+'.'+j+"}}",obj[i][j]);
					}
				}else{
					html=html.replace("{{"+i+"}}",obj[i]);
				}
			}
			return html;
		},
		hideAll:function(ele){//隐藏除ele外的元素
			//隐藏右键菜单
			$("#context_menu").hide();
			//隐藏开始菜单
			if(ele!="start_menu"){
				$("#start_menu").hide();
			}
			//隐藏通知中心
			if(ele!="notification"){
				$("#notification").animate({right:"-350px"});
			}
			//桌面快捷方式全部撤销选中
			if(ele!="shortcut"||!win._variable.keyDown[17]){
				$(".shortcuts>.shortcut").removeClass("select");
			}
			//显示桌面
			if(!$("#start_menu").is(":visible")){
				$("#shortcuts").css("opacity","1");
			}
		},
		getJson:function(){//获取用户配置的json数据，可保存至数据库
			var data={};
			$.extend(true, data, win._variable.options);
			delete data.menus;
			return data;
		}
	},
	_timeInfo: function() {//每秒更新一次时间
		setInterval(function() {
			var date = new Date();
			var year = date.getFullYear();
			var month = date.getMonth() + 1;
			var day = date.getDate();
			var hour = date.getHours();
			var min = date.getMinutes();
			min=min<10?"0"+min:min;
			var week = date.getDay();
			var weekCn = {1: "一",2: "二",3: "三",4: "四",5: "五",6: "六",7: "日"};
			$("#time").html(hour + ':' + min + '<br/>' + year + '/' + month + '/' + day);
			$("#time").parent().attr("title", year + '年' + month + '月' + day + '日\n星期' + weekCn[week]);
		}, 1000);
	},
	_batteryInfo: function() {//获取电池信息，每秒更新
		if(navigator.getBattery&&navigator.getBattery()) {
			setInterval(function() {
				navigator.getBattery().then(function(battery) {
					var msg=""
					if(battery.charging) {
						$("#battery").attr("class", "fa fa-flash");
						msg+="正在充电\n";
					} else {
						var num = Math.round(battery.level * 100 / 25);
						$("#battery").attr("class", "fa fa-battery-" + num);
					}
					msg+="电量" + battery.level * 100 + "%";
					$("#battery").parent().attr("title", msg);
				});
			}, 1000);
		}
	},
	_initBg:function(){
		$("#bg").removeAttr("src");
		$("#bg").css("background-image","none");
		var bgImg=win._variable.options.bgImg;
		if(bgImg.endsWith(".html")){
			var bgEle="./img/paper/html/"+bgImg;
			$("#bg").attr("src",bgEle);
		}else{
			var bgEle="./img/paper/img/"+bgImg;
			$("#bg").css("background-image","url("+bgEle+")");
		}
	},
	_initShortcuts:function(){//初始化桌面快捷方式
		$("#shortcuts").html("");
		var shortcuts=win._util.getShortcuts();
		//若没有app，则直接返回，不执行下面的代码
		if(shortcuts.length==0){
			return;
		}
		//排序
		shortcuts.sort(function(a,b){
			return a.shortcut.order-b.shortcut.order;
		})
		//初始化序号
		for(var i in shortcuts){
			shortcuts[i].shortcut.order=Number(i);
		}
		var shortHtml='<div class="shortcut" style="{{position}}" url="{{href}}"><i class="fa {{icon}}"></i><br/><span>{{name}}</span></div>';
		//本列可容纳的个数
		var num=Math.floor(($(".shortcuts").height()-$(".task_bar").height()-10)/100);
        var x=0,y=0;
		for(var i in shortcuts){
			var position='left:'+(x*80+10)+'px;top:'+(y*100+10)+'px';//快捷方式的位置
			var realHtml=shortHtml.replace("{{position}}",position);
			realHtml=win._util.replace(realHtml,shortcuts[i]);
			$("#shortcuts").append(realHtml);
			y++;
            //若超过本列最大数，则换列
            if(y>=num){
                y=0;
                x++;
            }
		}
		//桌面图标点击
		$(".shortcuts>.shortcut").click(function(e){
			e.stopPropagation();
			win._util.hideAll("shortcut");
			$(this).addClass("select");
		})
	},
	_initStartApps:function(){//初始化开始菜单程序列表
		$("#start_apps").html("");
		var apps=win._variable.options.start_apps;
		//若没有app，则直接返回，不执行下面的代码
		if(!apps||apps.length==0){
			return;
		}
		//获取app的声母
		for(var i in apps){
			apps[i].shengmu=shengmu(apps[i].name);
		}
		//按照声母进行排序
		apps.sort(function(a,b){
			return a.shengmu.charCodeAt(0)-b.shengmu.charCodeAt(0);
		})
		var titleHtml='<div class="ele noMenu"><span class="title">{{shengmu}}</span></div>';
		var appHtml='<div class="ele" url="{{href}}"><i class="fa {{icon}}"></i><span> {{name}}</span></div>';
		//当前的声母
		var theSm="";
		for(var i in apps){
			var app=apps[i];
			//插入新声母
			if(app.shengmu!=theSm){
				theSm=app.shengmu;
				$("#start_apps").append(titleHtml.replace("{{shengmu}}",theSm));
			}
			//插入声母对应的app
			var realHtml=appHtml;
			realHtml=win._util.replace(realHtml,app);
			$("#start_apps").append(realHtml);
		}
		
	},
	_initStartTiles:function(){//初始化开始菜单磁贴
		$("#start_tiles").html('<div class="tile tile-title noMenu">我的磁贴</div>');
		var tiles=win._util.getStartTiles();
		//若没有tiles，则直接返回，不执行下面的代码
		if(!tiles||tiles.length==0){
			return;
		}
		//排序
		tiles.sort(function(a,b){
			return a.start_tile.order-b.start_tile.order;
		})
		//初始化序号
		for(var i in tiles){
			tiles[i].start_tile.order=Number(i);
		}
		var tileHtml='<div class="tile tile-{{start_tile.size}}" url="{{href}}">{{data}}<div class="appname">{{name}}</div></div>';
		var tileMsg='<div class="msg"><p><div class="title">{{title}}</div><div class="content">{{content}}</div></p></div>';
		var tileIcon='<i class="fa {{icon}}"></i>';
		for(var i in tiles){
			var dataHtml="";
			//动态磁贴html
			if(win._variable.options.settings.liveTiles&&tiles[i].start_tile.live&&tiles[i].start_tile.msgs&&tiles[i].start_tile.msgs.length>0){
				var msgs=tiles[i].start_tile.msgs;
				for(var j in msgs){
					var msgHtml=win._util.replace(tileMsg,msgs[j]);
					dataHtml+=msgHtml;
				}
			}else{
				//无动态磁贴时显示图标
				dataHtml=tileIcon;
			}
			var realHtml=tileHtml.replace("{{data}}",dataHtml);
			realHtml=win._util.replace(realHtml,tiles[i]);
			$("#start_tiles").append(realHtml);
			//开始菜单磁贴 右键菜单
			$("#start_tiles .tile:not(.noMenu)").contextmenu(function(e){
				win._variable.contextMenuElement=$(this);
				win._initContextMenus(e,win._variable.options.menus.start_tiles,"start_menu");
			})
		}
	},
	_addNotification:function(obj){//添加通知
		//必须包含标题和内容
		if(!obj.title||!obj.content){
			return;
		}
		var noticeHtml='<div class="notice"><div class="close">&times;</div><p class="title">{{title}}</p><span class="content">{{content}}</span></div>';
		noticeHtml=win._util.replace(noticeHtml,obj);
		$("#notification").append(noticeHtml);
		var len=$("#notification .notice").length;
		$("#noti_sum").text("共"+len+"条")
		$("#btn_noti span.fa").addClass("fa-commenting-o");
		win._toast(obj.title,obj.content);
	},
	_toast:function(title, message){//右下角弹出通知提示
        var ele = $('<div class="toast"></div>');//
        $('<p>' + title + '</p>').appendTo(ele);
        $('<p class="msg">' + message + '</p>').appendTo(ele);
        $('<span class="close">&times;</span>').appendTo(ele);
        //获取上一个吐司
        var pre=$("body").find('.toast:last');
        var bottom=50;
        if(pre.length){
			bottom=Number(pre.css("bottom").replace("px",""))+pre.height()+10;    
        }
        ele.css("bottom",bottom);
        ele.appendTo("body");
        ele.fadeIn();
		function remove(){
			ele.fadeOut(function(){
				ele.remove();
			});
		}
		//3秒后删掉
		setTimeout(remove,3000);
		//点击关闭按钮
        $(".close", ele).click(remove);
        return ele;
 	},
	_initContextMenus:function(event,menus,ele){//初始化右键菜单
		//取消浏览器默认右键
		event.preventDefault();
		//禁止事件冒泡
		event.stopPropagation();
		win._util.hideAll(ele);
		$("#context_menu").html("");
		if(!menus||menus.length==0){
			return;
		}
		var menuHtml='<div class="context_ele" {{fn}}><i class="fa {{icon}}"></i><span>{{name}}</span>{{childern}}</div>';
		var childHtml='<div class="context_child" {{fn}}><i class="fa {{icon}}"></i><span>{{name}}</span></div>';
		var childsHtml="";
		for(var i=0;i<menus.length;i++){
			if(menus[i].childs&&menus[i].childs.length){
				childsHtml='<i class="fa fa-angle-right fa-pull-right"></i><div class="context_childs">';
				var childs=menus[i].childs;
				for(var j in childs){
					var cfn="";
					if(childs[j].fn){
						cfn='onclick="menuFn.'+childs[j].fn+'"';
					}
					var cRealHtml=childHtml.replace("{{fn}}",cfn);
					childsHtml+=win._util.replace(cRealHtml,childs[j]);
				}
				childsHtml+='</div>';
			}
			//替换fn初始化
			var fn='onclick="menuFn._stopPropagation()"';
			if(menus[i].fn){
				fn='onclick="menuFn.'+menus[i].fn+'"';
			}
			var realHtml=menuHtml.replace("{{fn}}",fn).replace("{{childern}}",childsHtml);
			realHtml=win._util.replace(realHtml,menus[i]);
			$("#context_menu").append(realHtml);
		}
		
		//确定鼠标位置，显示右键菜单
		$("#context_menu").css({"left":event.clientX + "px","top":event.clientY + "px"}).show();
	},
	_initHandler: function() {
		//循环显示动态磁贴
		setInterval(function(){
			$("#start_tiles .tile").each(function(){
				$(this).find(".msg").eq(0).fadeOut(1000,function(){
					$(this).insertBefore($(this).siblings(".appname"));
				})
			})
			$("#start_tiles .tile").each(function(){
				$(this).find(".msg").eq(1).fadeIn(1000);
			})
		},5000);
		
		//窗口调整大小
		$(window).resize(function(){
			//重新调整桌面快捷方式的位置
			win._initShortcuts(win._variable.options.shortcuts);
		})
		$(window).click(function(){
			win._util.hideAll();
		})
		//右键菜单
		$("#shortcuts").contextmenu(function(e) {//桌面空白处
			win._initContextMenus(e,win._variable.options.menus.blank);
		});
		$("#start_apps .ele:not(.noMenu)").contextmenu(function(e){//开始菜单app
			win._variable.contextMenuElement=$(this);
			win._initContextMenus(e,win._variable.options.menus.start_apps,"start_menu");
		})
		$(".start,.task_bar").contextmenu(function(e){//开始菜单和任务栏无右键菜单
			win._initContextMenus(e,null);
		})
		//开始菜单和任务栏左键点击无效
		$(".start,.task_bar").click(function(e){
			e.stopPropagation();
			win._util.hideAll("start_menu");
		})
		//开始按钮点击事件
		$("#btn_start").click(function(e) {
			e.stopPropagation();
			//隐藏右键菜单
			win._util.hideAll("start_menu");
			//弹出开始菜单
			$("#start_menu").slideToggle(300,function(){
				var v=$(this).is(":visible");
				if(v){
					$("#shortcuts").css("opacity","0.05");
				}else{
					$("#shortcuts").css("opacity","1");
				}
			});
		});
		//开始菜单滚动条
		$("#start_apps").mCustomScrollbar({
			autoHideScrollbar:true
		});
		$("#start_tiles").mCustomScrollbar({
			autoHideScrollbar:true
		});
		//通知中心点击事件
		$("#btn_noti").click(function(e){
			e.stopPropagation();
			win._util.hideAll("notification");
			var right=$("#notification").css("right");
			if(right=="0px"){
				$("#notification").animate({right:"-350px"});
			}else{
				$("#notification").animate({right:"0px"});
			}
		})
		//通知中心关闭按钮
		$("#notification").delegate(".notice .close","click",function(e){
			e.stopPropagation();
			var notice=$(this).parent(".notice");
			notice.css("transform","rotateX(90deg)");
			setTimeout(function(){
				notice.remove();
				//更换通知中心图标和通知中心合计数
				var len=$("#notification .notice").length;
				$("#noti_sum").text("共"+len+"条");
				if(!len){
					$("#btn_noti span.fa").removeClass("fa-commenting-o");
				}
			},600);
		})
		//通知中心清空
		$("#noti_clear").click(function(e){
			e.stopPropagation();
			$("#notification").find(".notice .close").trigger("click");
		})
		//键盘按下事件
		$(window).keydown(function(e){
			var keys=[17];
			if($.inArray(e.keyCode,keys)!=-1){
				win._variable.keyDown[e.keyCode]=true;
			}
		})
		//键盘松开
		$(window).keyup(function(e){
			var keys=[17];
			if($.inArray(e.keyCode,keys)!=-1){
				win._variable.keyDown[e.keyCode]=false;
			}
		})
	}
}